#include "Quest.h"

#include "Requisito.h"
#include "RequisitoMuerte.h"
#include "RequisitoObjeto.h"
#include "RequisitoZona.h"

#include "Recompensa.h"
#include "RecompensaDinero.h"
#include "RecompensaObjeto.h"

#include <iostream>

Quest::Quest( TiXmlElement *quest )
	{
		nombreQuest = quest->Attribute("nombre");
		texto		= quest->Attribute("texto");
		dueno		= quest->Attribute("dueno");
		
		estado = QUESTSTATE::INACTIVA;
		
		TiXmlElement *requisito = quest->FirstChildElement("requisitos")->FirstChildElement("requisito");
		TiXmlElement *ptrRecompensa = NULL;

		while(requisito){
			Requisito *r = NULL;
			if (!strcmp(requisito->Attribute("tipo"),"muerte")){
				string nombreObjetivo	= requisito->FirstChildElement("nombreObjetivo")->GetText();
				int totalObjetivos		= atoi(requisito->FirstChildElement("totalObjetivos")->GetText());
				r = new RequisitoMuerte(string("REQUISITO_MUERTE"),nombreObjetivo,totalObjetivos);
			}else if (!strcmp(requisito->Attribute("tipo"),"zona")){
				float x1 = atof(requisito->FirstChildElement("x1")->GetText());
				float y1 = atof(requisito->FirstChildElement("y1")->GetText());
				float x2 = atof(requisito->FirstChildElement("x2")->GetText());
				float y2 = atof(requisito->FirstChildElement("y2")->GetText());
				string mapa = requisito->FirstChildElement("mapa")->GetText();
				r = new RequisitoZona(string("REQUISITO_ZONA"),mapa,x1,y1,x2,y2);
			}else if (!strcmp(requisito->Attribute("tipo"),"objeto")){
				string	nombreObjeto = requisito->FirstChildElement("nombreObjeto")->GetText();
				int		totalObjetos = atoi(requisito->FirstChildElement("totalObjetivos")->GetText());
				r = new RequisitoObjeto(string("REQUISITO_OBJETO"),nombreObjeto,totalObjetos);
			}
			requisitos.push_back(r);
			requisito = requisito->NextSiblingElement("requisito");
		}

		ptrRecompensa = quest->FirstChildElement("recompensa");
		string tipoRecompensa = ptrRecompensa->Attribute("tipo");
		

		if (!tipoRecompensa.compare("dinero")){
			int cantidad = atoi(ptrRecompensa->GetText());
			recompensa = new RecompensaDinero(cantidad);
		}else if (!tipoRecompensa.compare("objeto")){
			string nombreObjeto = ptrRecompensa->GetText();
			recompensa = new RecompensaObjeto(nombreObjeto);
		}

	}
Quest::~Quest(void)
	{
	}

void Quest::setState( QUESTSTATE::estadoQuest estado )
	{
		this->estado = estado;
	}